package mylab.usm.api.model.authorization;

import mylab.base.model.LongIdName;
import mylab.commons.api.model.Tree;
import mylab.usm.api.enums.ResourceType;

import java.util.Collections;
import java.util.List;

/**
 * 系统角色
 */
public interface Resource extends LongIdName, Tree<Resource> {

    /**
     * 资源类型
     *
     * @return 资源类型
     */
    ResourceType getResourceType();

    /**
     * 前端图标
     *
     * @return 前端图标
     */
    String getFrontIcon();

    /**
     * 前端code
     *
     * @return 前端code
     */
    String getFrontCode();

    /**
     * 实体类型全名
     *
     * @return 实体类型全名
     */
    String getEntityName();

    /**
     * 资源路径
     * 路径匹配规则,形如：/admin/**
     *
     * @return 资源路径
     */
    String getUri();


    /**
     * 先决资源列表
     * 先决资源列表: 即获取本资源,必须先获取必要的资源
     *
     * @return 先决资源列表
     */
    default List<Resource> getPremise() {
        return Collections.emptyList();
    }

}
